﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Comissoes.Utilities;

namespace Comissoes.Models
{
    public class NaturezasOperacaoModel
    {
        public NATUREZAS_OPERACAO natureza { get; set; }
        xcontEntities db = new xcontEntities();
        List<string> erros;

        public NaturezasOperacaoModel()
        {
            NATUREZAS_OPERACAO natureza = new NATUREZAS_OPERACAO();

            this.natureza = natureza;
        }

        public NaturezasOperacaoModel(Int32? id)
        {
            this.natureza = db.NATUREZAS_OPERACAO.FirstOrDefault(t => t.ID_NTOP == id);
        }

        public List<string> UpdateValidate(HttpRequestBase request)
        {
            this.erros = new List<string>();
            String DESC_NTOP = request["DESC_NTOP"];

            if (string.IsNullOrEmpty(DESC_NTOP))
                erros.Add("É necessário informar a descrição da natureza de operação.");

            if (string.IsNullOrEmpty(request["CFOP_NTOP"]))
                erros.Add("É necessário informar o cfop.");

            else
            {
                Int32 CFOP_NTOP = Int32.Parse(request["CFOP_NTOP"]);
                if (db.NATUREZAS_OPERACAO.Any(t => t.CFOP_NTOP == CFOP_NTOP && t.ID_NTOP != this.natureza.ID_NTOP))
                    erros.Add("Já existe uma natureza de operação cadastrada com este CFOP no momento.");
            }

            return erros;
        }

        public List<string> Update(HttpRequestBase request)
        {
            this.erros = new List<string>();

            try
            {
                if (db.NATUREZAS_OPERACAO.Any(t => t.ID_NTOP == this.natureza.ID_NTOP))
                    this.natureza = db.NATUREZAS_OPERACAO.FirstOrDefault(t => t.ID_NTOP == this.natureza.ID_NTOP);

                else
                    db.AddToNATUREZAS_OPERACAO(this.natureza);

                this.natureza.CFOP_NTOP = Int32.Parse(request["CFOP_NTOP"]);
                this.natureza.DESC_NTOP = request["DESC_NTOP"];
                this.natureza.ATIVO_NTOP = request["ATIVO_NTOP"].Contains("Sim") ? "A" : "B";

                db.SaveChanges();
            }
            catch (Exception ex)
            {
                erros.Add(ex.Message);
                if (ex.InnerException != null)
                    erros.Add(ex.InnerException.Message);
            }

            return erros;
        }

        public List<string> Delete()
        {
            this.erros = new List<string>();

            if (!erros.Any())
            {
                try
                {
                    db.DeleteObject(db.NATUREZAS_OPERACAO.FirstOrDefault(t => t.ID_NTOP == this.natureza.ID_NTOP));
                    db.SaveChanges();
                }
                catch (Exception ex)
                {
                    erros.Add(ex.Message);
                }
            }

            return erros;
        }
    }
}
